package com.geek.jvm;

/**
 * 字符串连接测试
 * String.intern()方法，当字符串在字符串常量池里面存在的话，则返回常量池的引用，否则返回对象自身的引用
 */
public class StringTest {

	public static void main(String[] args) {
		String str4 = "aaa";
		String str5 = "aaa";
		System.out.println(str4 == str5);

		//这里因为java是关键字，jvm一早就把java放到常量池里面了，所以返回的false
		String str1 = new StringBuilder("ja").append("va").toString();
		System.out.println(str1 == str1.intern());

		//因为常量池里面不可能存在“计算机技术”，因此intern方法返回了str2的引用
		String str2 = new StringBuilder("计算机").append("技术").toString();
		System.out.println(str2 == str2.intern());

		//这里将test这个字面量放进来常量池，因此str3.intern()返回的是常量池的引用，而str3是new String("test")这个对象的引用，因此不相等
		String str3 = new String("test");
		System.out.println(str3 == str3.intern());

		//Integer对象常量池缓存到[-128,127]，因此i1 == i2为true
		//事实上Integer i1 = 127在Jvm中会编译成Integer i1 = Integer.valueOf(127);
		Integer i1 = 127;
		Integer i2 = 127;
		System.out.println(i1 == i2);
		Integer i3 = 128;
		Integer i4 = 128;
		System.out.println(i3 == i4);

	}

}
